# Mysql 离线安装
# 上传文件已完成之后的操作
# 因需要root权限，脚本需要 sudo mysql.sh
echo "开始mysql安装，前置依赖"
mariadb=`rpm -qa | grep mariadb`
#-z 是判断为空， -n判断不为空， "$"是防止变量未定义报错
if [ -z "$mariadb" ]; then
    echo "mariadb已经卸载！"
else
	rpm -e  $mariadb --nodeps
    echo "卸载mariadb"
fi
# 安装 libaio
libaio=`rpm -qa | grep libaio`
if [ -n "$libaio" ]; then
	rpm -e  $libaio --nodeps
    echo "卸载libaio"
fi
rpm -ivh libaio-*.rpm --nodeps --force   # 忽略依赖校验

# 安装 numactl
numactl=`rpm -qa | grep numactl`
if [ -n "$numactl" ]; then
	rpm -e  $numactl --nodeps
    echo "卸载libaio"
fi
rpm -ivh numactl-*.rpm --nodeps --force   # 忽略依赖校验

# 校验安装，应显示 libaio 版本
rpm -qa | grep libaio    
# 应显示 numactl 版本（如 numactl-2.0.9）
rpm -qa | grep numactl   
 # 检查 NUMA
numactl --hardware 

#创建用户组和用户
mysql_group=mysql
mysql_name=msyql
if getent group $mysql_group >/dev/null; then
    echo "$mysql_group,用户组已存在"
else
	sudo groupadd "$mysql_group"
	echo "$mysql_group,用户组创建成功"
fi

if id -u "$mysql_name" >/dev/null 2>&1; then
    echo "$mysql_name用户存在"}
else
	sudo useradd -g $mysql_group -s /bin/shell $mysql_name
    echo "$mysql_name用户不存在"
fi



#创建mysql安装目录
mysql_path=/opt/hadoop/mysql
mysql_data=/opt/hadoop/mysql/data

#-r（可读）、-w（可写）、-x（可执行）、-s（非空文件）
#-f 文件， -d 目录， -e 文件或目录
if [ -e "$mysql_path" ]; then
	rm -rf $mysql_path
    echo "$mysql_path,已删除"
fi
sudo mkdir -p $mysql_path
echo "$mysql_path,创建目录成功！"

if [ -e "$mysql_data" ]; then
	rm -rf $mysql_data
    echo "$mysql_data,目录已删除"
fi
sudo mkdir -p $mysql_data
echo "$mysql_data,创建目录成功！"

#对用户添加可读权限
sudo chown -R $mysql_group:$mysql_name  $mysql_path 



# 解压安装包到安装目录
tar -xvf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz -C $mysql_path
# 进入安装目录
cd $mysql_path

# 初始化数据库（生成初始密码，记录在日志中）
# user=mysql(mysql操作linux时使用的用户), basedir=/usr/local/mysql(安装目录) datadir=/data/mysql(数据目录)
sudo bin/mysqld --initialize --user=$mysql_name --basedir=$mysql_path --datadir=$mysql_data
# 注意：初始化成功后，日志中会显示临时密码（如A temporary password is generated for root@localhost: xxxxx），需记录下来。

# 启用SSL（可选，增强安全性）
#bin/mysql_ssl_rsa_setup --datadir=$mysql_data

# 创建配置文件 /etc/my.cnf
cat > /etc/my.cnf << EOF
[mysqld]
basedir=$mysql_path
datadir=$mysql_data
port = 3306
socket=/var/lib/mysql/mysql.sock
log-error=$myql_log/mysqld.log
pid-file=$myql_log/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
EOF

#将环境变量写入到/etc/profile.d/mysql_env.sh
sudo echo "export PATH=$PATH:$mysql_path/bin" >> /etc/profile.d/mysql_env.sh
#环境变量生效
sudo source /etc/profile 


#复制脚本到/etc/init.d/

basedir=/usr/local/mysql
datadir=/data/mysql
sudo cp $mysql_path/support-files/mysql.server /etc/init.d/mysqld



 # 添加服务
sudo chkconfig --add mysqld 
# 开机自启
sudo chkconfig mysqld on     
# 启动服务
sudo service mysqld start    
#验证服务状态
sudo service mysqld status  


#修改初始化密码
# 获取临时密码
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
[ -z "$TEMP_PASS" ] && { echo "未找到临时密码"; exit 1; }



